#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

extern char **environ;

int main()
{
    // 启动一个子进程
    pid_t pid = fork();
    // char *parameter[] = {
    //     "/usr/bin/ping",
    //     "-c",
    //     "5",
    //     "www.baidu.com",
    //     NULL};
    char *parameter[] = {
        "/usr/bin/bash",
        "/home/jack/桌面/shell_code/add_1.sh",
        "2",
        "4",
        NULL};

    if (pid < 0)
    {
        printf("启动进程失败\n");
        perror("fork");
    }
    else if (pid > 0)
    {
        printf("进程启动成功,子进程pid = %d\n", pid);
    }
    else
    {
        printf("我是子进程\n");
        // int result = execve("/usr/bin/ping", parameter, environ);
        /*exec系列函数  父进程跳转进入一个新进程
            推荐使用execve
            char *__path: 需要执行程序的完整路径名
            char *const __argv[]: 指向字符串数组的指针 需要传入多个参数
                (1) 需要执行的程序命令(同*__path)
                (2) 执行程序需要传入的参数
                (3) 最后一个参数必须是NULL
            char *const __envp[]: 指向字符串数组的指针 需要传入多个环境变量参赛
                (1) 环境变量参赛 固定格式 key=value
                (2) 最后一个参数必须是NULL
            return: 成功就回不来了 下面的代码都没有意义  
                    失败返回-1
            int execve (const char *__path, char *const __argv[], char *const __envp[])
        */
        int result = execve("/usr/bin/bash", parameter, environ);
        if (result < 0)
        {
            printf("执行失败\n");
            perror("execve");
        }
    }

    return 0;
}